﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using SistemadeEstágios.Model;
using SistemadeEstágios.Negocio;
using System.Drawing.Printing;
using Microsoft.Office.Interop;

namespace SistemadeEstágios
{
    public partial class frmCadContratos : Form
    {
        #region Propriedades
        private EstagiarioNG _dbEst;
        private CursosNG _dbCur;
        private ResponsaveisNG _dbResp;
        private EnpresasNG _dbEmp;
        private MediadoraNG _dbMed;
        private ContratoNG _dbCont;
        private Contrato _cont;
        private string caminho;

        #endregion

        #region Metodos Form
        public frmCadContratos()
        {
            InitializeComponent();
        }

        private void frmCadContratos_Load(object sender, EventArgs e)
        {
            Left = 200;
            Top = 55;
        }

        #region KeyPress

        private void TxtNumero_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtApolice_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtSeguradora_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtMatricula_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtEmpresa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtMediadora_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtResponsavel_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtHrDiaria_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtHrSemanal_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtValor_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtBonus_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        #endregion

        #region Click
        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            LimpaCampos();
        }

        private void BtnBscMatricula_Click(object sender, EventArgs e)
        {
            _dbCont = new ContratoNG();
            frmPesquisa frm = new frmPesquisa();
            frm.titulo = "Pesquisa por Estagiários";
            frm.Tipo = TipoPesquisa.Estagiario;
            frm.ShowDialog();

            if (frm.bRetorno)
            {
                TxtMatricula.Text = frm.iRetorno.ToString();
                TxtMatricula_Validating(TxtMatricula, new CancelEventArgs(false));
            }
            frm.Close();

            _cont = _dbCont.Buscar(1);
        }

        private void BtnBscEmpresa_Click(object sender, EventArgs e)
        {
            frmPesquisa frm = new frmPesquisa();
            frm.titulo = "Pesquisa por Empresas";
            frm.Tipo = TipoPesquisa.Empresa;
            frm.ShowDialog();

            if (frm.bRetorno)
            {
                TxtEmpresa.Text = frm.iRetorno.ToString();
                TxtEmpresa_Validating(TxtEmpresa, new CancelEventArgs());
            }
        }

        private void BtnBscMediadora_Click(object sender, EventArgs e)
        {
            frmPesquisa frm = new frmPesquisa();
            frm.titulo = "Pesquisa por Mediadoras";
            frm.Tipo = TipoPesquisa.Mediadora;
            frm.ShowDialog();

            if (frm.bRetorno)
            {
                TxtMediadora.Text = frm.iRetorno.ToString();
                TxtMediadora_Validating(TxtMediadora, new CancelEventArgs());
            }
        }

        private void BtnBscResponsavel_Click(object sender, EventArgs e)
        {
            frmPesquisa frm = new frmPesquisa();
            frm.titulo = "Pesquisa por Responsável";
            frm.Tipo = TipoPesquisa.Responsavel;
            frm.ShowDialog();

            if (frm.bRetorno)
            {
                TxtResponsavel.Text = frm.iRetorno.ToString();
                TxtResponsavel_Validating(TxtResponsavel, new CancelEventArgs());
            }
        }

        private void BtnBscNumero_Click(object sender, EventArgs e)
        {
            frmPesquisa frm = new frmPesquisa();
            frm.titulo = "Pesquisa por Contratos";
            frm.Tipo = TipoPesquisa.Contrato;
            frm.ShowDialog();

            if (frm.bRetorno)
            {
                TxtNumero.Text = frm.iRetorno.ToString();
                TxtNumero_Validating(TxtNumero, new CancelEventArgs(false));
            }
        }

        private void BtnConfirmar_Click(object sender, EventArgs e)
        {

        }

        private void BtnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void BtnImprimir_Click(object sender, EventArgs e)
        {

            string contrato = string.Empty;
            int iContrato;
            frmEscolha frm = new frmEscolha();
            frm.ShowDialog();

            if (frm.bRetorno)
            {
                iContrato = frm.iRetorno;

                if (DigitaContrato(iContrato))
                {
                                     

                    switch (iContrato)
                    {
                        case 1:
                            contrato = EscreveCompromisso(contrato);
                            break;
                        default:
                            break;
                    }

                    //stream.Close();
                    StreamWriter write = new StreamWriter(caminho);
                    write.Write(contrato);
                    write.Close();
                }
            }
        }

        private string EscreveCompromisso(string contrato)
        {
            MaskedTextProvider mask;
            try
            {
                contrato = contrato.Replace("<Nome>", _cont.Estagiario.Nome);
                contrato = contrato.Replace("<Matricula>", _cont.Estagiario.Matricula.ToString());
                contrato = contrato.Replace("<Curso>", _cont.Estagiario.Curso.Nome);
                contrato = contrato.Replace("<Semestre>", _cont.Estagiario.Semestre.ToString());
                mask = new MaskedTextProvider("000,000,000-00");
                mask.Set(_cont.Estagiario.Cpf);
                contrato = contrato.Replace("<CPF>", mask.ToDisplayString());
                contrato = contrato.Replace("<RG>", _cont.Estagiario.RG);
                contrato = contrato.Replace("<Endereco>", _cont.Estagiario.Endereco);
                contrato = contrato.Replace("<Cidade>", _cont.Estagiario.Cidade);
                contrato = contrato.Replace("<CEP>", _cont.Estagiario.CEP);
                contrato = contrato.Replace("<Telefone>", _cont.Estagiario.Telefone);

            }
            catch (Exception e)
            {
                throw new Exception("Não foi possível redigir o contrato. Erro: " + e.StackTrace);
            }

            return contrato;
        }

        #endregion

        #region KeyUp
        private void TxtMatricula_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F2)
                BtnBscMatricula_Click(BtnBscMatricula, new EventArgs());
        }

        private void TxtEmpresa_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F2)
                BtnBscEmpresa_Click(BtnBscEmpresa, new EventArgs());
        }

        private void TxtMediadora_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F2)
                BtnBscMediadora_Click(BtnBscMediadora, new EventArgs());
        }

        private void TxtResponsavel_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F2)
                BtnBscResponsavel_Click(BtnBscResponsavel, new EventArgs());
        }
        #endregion

        #region Validating
        private void TxtMatricula_Validating(object sender, CancelEventArgs e)
        {
            Estagiaros est;

            if (_dbEst == null) _dbEst = new EstagiarioNG();

            if (!string.IsNullOrWhiteSpace(TxtMatricula.Text))
            {
                est = _dbEst.Buscar(Int32.Parse(TxtMatricula.Text));

                if (est != null)
                {
                    LblMstEstagiario.Text = est.Nome;
                }
                else
                {
                    MessageBox.Show("Estagiário não cadastrado. Tente Novamente.");
                    e.Cancel = true;
                }
            }
        }

        private void TxtEmpresa_Validating(object sender, CancelEventArgs e)
        {
            Empresas empresa;
            _dbEmp = new EnpresasNG();
            if (!string.IsNullOrEmpty(TxtEmpresa.Text))
            {
                empresa = _dbEmp.Buscar(Int32.Parse(TxtEmpresa.Text));
                if (empresa != null)
                {
                    LblMstEmpresa.Text = empresa.Nome + " - " + empresa.SupervisorNome;

                }
                else
                {
                    MessageBox.Show("Empresa não cadastrada. Tente Novamente.");
                    e.Cancel = true;
                }
            }
        }

        private void TxtMediadora_Validating(object sender, CancelEventArgs e)
        {
            Mediadora med;
            _dbMed = new MediadoraNG();
            if (!string.IsNullOrEmpty(TxtMediadora.Text))
            {
                med = _dbMed.Buscar(Int32.Parse(TxtMediadora.Text));
                if (med != null)
                {
                    LblMstMediadora.Text = med.Nome;
                }
                else
                {
                    MessageBox.Show("Mediadora não cadastrada. Tente Novamente.");
                    e.Cancel = true;
                }
            }
        }

        private void TxtResponsavel_Validating(object sender, CancelEventArgs e)
        {
            Responsaveis resp;
            _dbResp = new ResponsaveisNG();
            if (!string.IsNullOrEmpty(TxtResponsavel.Text))
            {
                resp = _dbResp.Buscar(Int32.Parse(TxtResponsavel.Text));
                if (resp != null)
                {
                    LblMstResponsavel.Text = resp.Nome;
                }
                else
                {
                    MessageBox.Show("Responsável não cadastrado. Tente Novamente.");
                    e.Cancel = true;
                }
            }
        }

        private void TxtNumero_Validating(object sender, CancelEventArgs e)
        {
            _dbCont = new ContratoNG();

            if (!string.IsNullOrWhiteSpace(TxtNumero.Text))
            {
                _cont = _dbCont.Buscar(Int32.Parse(TxtNumero.Text));
                if (_cont != null)
                {
                    PreencheCampos(_cont);
                }
            }
        }
        #endregion

        #endregion

        #region Metodos

        #region LimpaCampos
        private void LimpaCampos()
        {
            foreach (Control ctl in Controls)
            {
                if (ctl.GetType() == typeof(GroupBox))
                {
                    foreach (Control control in ctl.Controls)
                    {
                        if (control.GetType() == typeof(TextBox))
                        {
                            control.Text = "";
                        }
                        else if (control.GetType() == typeof(DateTimePicker))
                        {
                            var dtp = (DateTimePicker)control;
                            dtp.Value = DateTime.Now;
                        }
                        else if (ctl.GetType() == typeof(GroupBox))
                        {
                            foreach (Control cont in control.Controls)
                            {
                                if (cont.GetType() == typeof(TextBox))
                                {
                                    cont.Text = "";
                                }
                            }
                        }
                    }
                }
            }

            TxtNumero.Text = "";
            
        }

        #endregion

        private void PreencheCampos(Contrato obj)
        {

        }

        #region Digita Contrato
        private bool DigitaContrato(int contrato)
        {
            byte[] texto = null;

            texto = _dbCont.BuscaModelo(contrato);

            if (texto != null)
            {
                FileStream fs;
                caminho = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

                caminho += "\\ContratoEstagio.rtf";
                fs = new FileStream(caminho, FileMode.Create);
                fs.Write(texto, 0, texto.Length);
                fs.Close();
            }

            return true;
        }

        #endregion

        #endregion

    }
}
